package org.example;

import com.sap.conn.jco.*;
import com.sap.conn.jco.ext.DestinationDataProvider;
import javafx.application.Application;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;


// 按两次 Shift 打开“随处搜索”对话框并输入 `show whitespaces`，
// 然后按 Enter 键。现在，您可以在代码中看到空格字符。
public class Main {
    static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";
    static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";
    //配置连接
    static {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "192.168.0.14");//IP
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00");//系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "800");//客户端编号
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "ITDEV1");//用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "123.qwer");//密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "zh");//语言
        createDestinationDataFile(DESTINATION_NAME1, connectProperties);
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "30");//最大空闲连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "150");//最大活动连接数
        createDestinationDataFile(DESTINATION_NAME2, connectProperties);
    }
    /*
    创建配置连接文件
    */
    static void createDestinationDataFile(String destinationName, Properties connectProperties) {
        File destCfg = new File(destinationName + ".jcoDestination");
        try {
            FileOutputStream fos = new FileOutputStream(destCfg, false);
            connectProperties.store(fos, "For tests only !");
            fos.close();
        } catch (Exception e) {
            throw new RuntimeException("Unable to create the destination files", e);
        }
    }

    /*
    获取连接
    */
    public static JCoDestination getSAPDestination() throws JCoException {
        JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME2);

        return destination;

    }
    public static void main(String[] args) throws JCoException{
        //new SAPConnUtils().jCoDestination
        //Application application = new Application();//
        //JCoDestination jCoDestination = new JCoDestination
        System.out.println("正在连接SAP...");
        JCoDestination sapDestination = getSAPDestination();
        //返回一个JCoFunction初始参数的传递函数名。获取接口方法
        JCoFunction function = sapDestination.getRepository().getFunction("ZFM_JST_CREATE_SO");
        //1.单独的参数，不在表结构下
        //function.getImportParameterList().setValue("NAME1", "VALUE1");// 参数

        //2.JCoStructure 一般为HEADER参数
        JCoStructure Structure=function.getImportParameterList().getStructure("ZSD_VBAK");
        Structure.setValue("SALES_ORG", "1000");//参数
        Structure.setValue("DISTR_CHAN", "10");//参数
        Structure.setValue("DIVISION", "01");//参数
        Structure.setValue("PARTN_NUMB", "100055");//参数
        Structure.setValue("CURRENCY", "RMB");//参数
        Structure.setValue("SHIP_TYPE", "02");//参数
        Structure.setValue("PARNR", "");//参数
        Structure.setValue("PURCH_NO_C", "231130-188518317730810");//参数
        Structure.setValue("STREET", "");//参数
        Structure.setValue("STR_SUPPL3", "");//参数
        Structure.setValue("TELEPHONE", "");//参数
        Structure.setValue("CITY", "县");//参数
        Structure.setValue("FLAG", "3");//参数
        Structure.setValue("ORDERID", "944856");//参数
        Structure.setValue("ORDER_DATE", "20231209");//参数
        Structure.setValue("SITEID", "15067548");//参数
        Structure.setValue("ORDER_ID", "944856");//参数
        Structure.setValue("SA_BILNO", "520930");//参数
        Structure.setValue("SB_BILNO", "1490056755");//参数
        Structure.setValue("OPERATETYPE", "补发");//参数
        Structure.setValue("BILTYPENAME", "补发");//参数
        Structure.setValue("ORDERTYPE", "拼多多");//参数

        //3.JCoTable 主体参数，可为多个主体参数。。。
        JCoTable headerImportParam = function.getTableParameterList().getTable("ZSD_VBAP");//
        //如果为参数集合，在外层加for循环即可
        headerImportParam.appendRow();//附加表的最后一个新行,行指针,它指向新添加的行。
        headerImportParam.setValue("MATERIAL", "QJQN151A0000010");//参数
        headerImportParam.setValue("ITM_NUMBER", "1");//参数
        headerImportParam.setValue("STORE_LOC", "0091");//参数
        headerImportParam.setValue("PLANT", "FZ01");//参数
        headerImportParam.setValue("ITEM_CATEG", "ZTAN");//参数
        headerImportParam.setValue("REQ_QTY", "1");//参数
        headerImportParam.setValue("COND_VALUE", 0);//参数
        headerImportParam.setValue("BSTKD", "231130-188518317730810");//参数
        headerImportParam.setValue("AMTN_NOTAX", 0);//参数
        headerImportParam.setValue("TAX", 0);//参数
        headerImportParam.setValue("AMTN", "0");//参数

        //执行接口
        function.execute(sapDestination);

        //接口返回结果
//        JCoTable returnStructure = function.getTableParameterList().getTable("TD_RETURN");
//        for (int i = 0; i < returnStructure.getNumRows(); i++) {
//            returnStructure.setRow(i);
//            System.out.println(returnStructure.getString("Param1"));
//            System.out.println(returnStructure.getString("Param2"));
//        }
//
        System.out.println("连接SAP结束");
    }
}